package Server;

import java.io.*;
import java.net.*;
import java.util.logging.*;
/**
 * 服务器类
 * 任务为：
 * 读取F:/目录的内容，返回信息给客户端
 * 根据客户端的任务命令，执行相应的任务
 * 包括：
 * 1.提供下载功能，根据客户端选择的数字，下载相应的文件
 * 2.如果是ls命令：查看当前目录下的文件和文件夹信息（名字，大小）
 * 3.如果是cd命令：进入指定的目录，如：cd 23 进入标识为23的目录
 * 4.如果是xz命令：下载指定文件，如：xz 23 下载标识为23的文件
 * 5.如果是pwd命令：查看当前目录的路径
 * 6.如果是wq命令：关闭连接
 */
public class server {
    private ServerSocket serverSocket; // 服务器套接字
    private int port = 2121; // 端口号

    /**
     * 方法：打开端口
     * @param port
     */
    public void OpenPort(int port) {
        try {
            // 创建一个ServerSocket实例，绑定到指定端口
            serverSocket = new ServerSocket(this.port);
            // 输出提示信息，表示端口已打开
            System.out.println("端口 " + port + " 已打开");
        } catch (IOException e) {
            // 如果发生IOException，打印堆栈跟踪信息
            e.printStackTrace();
        }
    }


    /**
     * 方法：获取客户端连接
     */
    public void GetClient() {
        try {
            // 循环等待客户端连接
            while (true) {
                // 接受客户端连接
                Socket clientSocket = serverSocket.accept();
                ClientHandler clientHandler=new ClientHandler(clientSocket);
                // 为每个客户端连接创建一个新线程来处理通信
                Thread clientThread = new Thread(clientHandler);
                clientThread.start();
                //单独测试
                //clientHandler.run();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 方法：运行服务器
     */
    public void run() {
        // 调用OpenPort方法打开端口
        OpenPort(port);
        // 调用GetClient方法获取客户端连接
        GetClient();
    }
    public static void main(String[] args){
        server server = new server();
        server.run();
    }
}
